
package com.ruoyi.auth.service;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.PhoneUtil;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.SendSmsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Component
public class SmsService {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 发送短信验证码
     * @param phoneNumber 手机号数组（例如：{"+8613800138000"}）
     * @return 返回验证码 key（可用于后续验证），失败返回 null
     */
    public R sendSms(String[] phoneNumber) {
        // 1. 校验手机号格式
        if (phoneNumber == null || phoneNumber.length == 0) {
            return R.fail("手机号不能为空");
        }

        for (String number : phoneNumber) {
            if (!PhoneUtil.isMobile(number)) {
                return R.fail("手机号格式错误");
            }
        }

        // 2. 生成6位随机数字验证码
        String code = RandomUtil.randomNumbers(6); // 使用 Hutool 正确的 API

        try {

            // 3. 调用短信发送工具类
            SendSmsUtil.sendSms(phoneNumber, code);

            System.out.println(phoneNumber[0]);

            // 去除 +86 或 86 前缀
            String purePhoneNumber = phoneNumber[0].replaceFirst("^(\\+86|86)", "");


            // 4. 将验证码写入 Redis，设置3分钟过期时间
            String redisKey = "sms:code:" + purePhoneNumber; // 按手机号作为key
            stringRedisTemplate.opsForValue().set(redisKey, code, 200, TimeUnit.HOURS);

            // 5. 返回验证码 key
            return R.ok(redisKey);
        } catch (Exception e) {
           return R.fail("短信发送失败");
        }
    }
}